#!/usr/bin/env python
# -*- coding: utf8 -*-
# 
# Programado por Juan Marcelo Conca y Pablo Carrai

#
# Este programa es software libre; usted puede redistruirlo y/o modificarlo bajo
# los términos de la Licencia Pública General GNU, tal y como está publicada
# por la Free Software Foundation; ya sea la versión 2 de la Licencia, o (a su
# elección) cualquier versión posterior.
#
# Este programa se distribuye con la intención de ser útil, pero SIN NINGUNA
# GARANTÍA; incluso sin la garantía implícita de USABILIDAD O UTILIDAD PARA UN
# FIN PARTICULAR. Vea la Licencia Pública General GNU para más detalles.
#
# Usted debería haber recibido una copia de la Licencia Pública General GNU
# junto a este programa; si no es así, escriba a la Free Software Foundation,
# Inc. 675 Mass Ave, Cambridge, MA 02139, EEUU.
#
# Programado en python utilizando geany como editor, y para la parte grafica
# wxglade
#Importamos los modulos necesarios

import wx
import smtplib
import mimetypes
from email.MIMEText import MIMEText
from email.Encoders import encode_base64



class Mail(wx.Frame):
    def __init__(self, *args, **kwds):
    	
    	kwds['style'] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.panel_2 = wx.Panel(self, -1)
        self.label_1 = wx.StaticText(self.panel_2, -1, '           De:')
        self.text_ctrl_1 = wx.TextCtrl(self.panel_2, -1, '')
        self.text_ctrl_1.SetFocus()
        self.label_2 = wx.StaticText(self.panel_2, -1, 'Password:')
        self.text_ctrl_2 = wx.TextCtrl(self.panel_2, -1, '', style=wx.TE_PASSWORD)
        self.label_3 = wx.StaticText(self.panel_2, -1, '        Para:')
        self.text_ctrl_3 = wx.TextCtrl(self.panel_2, -1, '')
        self.label_4 = wx.StaticText(self.panel_2, -1, '    Asunto:')
        self.text_ctrl_4 = wx.TextCtrl(self.panel_2, -1, '')
        self.text_ctrl_5 = wx.TextCtrl(self.panel_2, -1, '', style=wx.TE_MULTILINE)
        self.button_1 = wx.Button(self.panel_2, -1, 'Enviar')
        self.button_2 = wx.Button(self.panel_2, -1, 'Cancelar')

        self.__set_properties()
        self.__do_layout()
        

    def __set_properties(self):
    	
        self.SetTitle('Envio de Correo')
        self.SetSize((350, 450))
        self.CenterOnScreen()
        self.text_ctrl_1.SetMinSize((250, 27))
        self.text_ctrl_2.SetMinSize((250, 27))
        self.text_ctrl_3.SetMinSize((250, 27))
        self.text_ctrl_4.SetMinSize((250, 27))
        self.text_ctrl_5.SetMinSize((255, 180))



    def __do_layout(self):
    	
        sizer_3 = wx.BoxSizer(wx.VERTICAL)
        grid_sizer_1 = wx.FlexGridSizer(3, 1, 0, 0)
        grid_sizer_6 = wx.FlexGridSizer(1, 2, 0, 0)
        grid_sizer_5 = wx.FlexGridSizer(1, 2, 0, 0)
        grid_sizer_4 = wx.FlexGridSizer(1, 2, 0, 0)
        grid_sizer_3 = wx.FlexGridSizer(1, 2, 0, 0)
        grid_sizer_2 = wx.FlexGridSizer(1, 2, 0, 0)
        grid_sizer_2.Add(self.label_1, 0, wx.ALL, 10)
        grid_sizer_2.Add(self.text_ctrl_1, 0, wx.ALL|wx.EXPAND, 10)
        grid_sizer_2.AddGrowableCol(1)
        grid_sizer_1.Add(grid_sizer_2, 1, wx.EXPAND, 0)
        grid_sizer_3.Add(self.label_2, 0, wx.ALL, 10)
        grid_sizer_3.Add(self.text_ctrl_2, 0, wx.ALL|wx.EXPAND, 10)
        grid_sizer_3.AddGrowableCol(1)
        grid_sizer_1.Add(grid_sizer_3, 1, wx.EXPAND, 0)
        grid_sizer_4.Add(self.label_3, 0, wx.ALL, 10)
        grid_sizer_4.Add(self.text_ctrl_3, 0, wx.ALL|wx.EXPAND, 10)
        grid_sizer_4.AddGrowableCol(1)
        grid_sizer_1.Add(grid_sizer_4, 1, wx.EXPAND, 0)
        grid_sizer_5.Add(self.label_4, 0, wx.ALL, 10)
        grid_sizer_5.Add(self.text_ctrl_4, 0, wx.ALL|wx.EXPAND, 10)
        grid_sizer_5.AddGrowableCol(1)
        grid_sizer_1.Add(grid_sizer_5, 1, wx.EXPAND, 0)
        grid_sizer_1.Add(self.text_ctrl_5, 0, wx.ALL|wx.EXPAND, 10)
        grid_sizer_6.Add(self.button_1, 0, wx.ALL|wx.ALIGN_BOTTOM, 10)
        grid_sizer_6.Add(self.button_2, 0, wx.ALL|wx.ALIGN_BOTTOM, 10)
        grid_sizer_6.AddGrowableCol(0)
        grid_sizer_1.Add(grid_sizer_6, 1, wx.EXPAND, 0)
        self.panel_2.SetSizer(grid_sizer_1)
        grid_sizer_1.AddGrowableCol(0)
        sizer_3.Add(self.panel_2, 1, wx.EXPAND, 0)
        self.SetSizer(sizer_3)
        self.Layout()
        
        self.Bind(wx.EVT_BUTTON, self.OnCancelar, self.button_2)
        self.Bind(wx.EVT_BUTTON, self.OnEnviar, self.button_1)


    
    def OnCancelar(self, evt):
        self.Close()
        
        
    def OnEnviar(self, evt):
    	de=self.text_ctrl_1.GetValue().lower() 
        pas=self.text_ctrl_2.GetValue()
        para=self.text_ctrl_3.GetValue().lower() 
        asunto=self.text_ctrl_4.GetValue()
        #ver esto para capturar problema de usuario o pas Hacer una esepcion
        #raise SMTPAuthenticationError()
                
        
        lista=[para]
        # tomando el mensaje
        self.mensaje = self.text_ctrl_5.GetValue()
        mensaje = MIMEText(self.mensaje)
        # Al mensaje le agregamos quien lo envia
        mensaje['From'] = de
        # Un subject
        # tomando el asunto
        
        mensaje['Subject'] = asunto
        # Nos conectamos al servidor smtp de gmail en el puerto 587
        mailServer = smtplib.SMTP('smtp.gmail.com',587)
        mailServer.ehlo()
        mailServer.starttls()
        mailServer.ehlo()
        # Nos logueamos con usuario y pass
        mailServer.login(de, pas)
        # Y enviamos los mail
        for adr in lista:
            mensaje['To']= adr
            # Enviamos el mensaje
            mailServer.sendmail(de, adr, mensaje.as_string())

        # cerramos el servidor 
        mailServer.close()
        dlg = wx.MessageDialog(self, 'El mensaje fue enviado correctamente', 'Mail', wx.OK | wx.ICON_INFORMATION)
        dlg.ShowModal()
        dlg.Destroy()


if __name__ == '__main__':
    app = wx.PySimpleApp(0)
    wx.InitAllImageHandlers()
    ventana = Mail(None, -1, '')
    app.SetTopWindow(ventana)
    ventana.Show()
    app.MainLoop()
